001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Feb 26, 2003 005 * Time: 7:57:04 PM 006 */ 007 008 package EVolve.util.painters.placements; 009 010 import EVolve.util.painters.shapes.Shape; 011 import EVolve.visualization.AutoImage; 012 import EVolve.exceptions.NoDataPlotException; 013 014 import java.awt.*; 015 016 public class RectPlacement extends Placement{ 017 018 public RectPlacement(int shapeSize) { 019 super(); 020 this.shapeSize = shapeSize; 021 } 022 023 public String getName() { 024 return "Rectangle Placement"; 025 } 026 027 public Rectangle initialPlacement(AutoImage image) throws NoDataPlotException{ 028 int totalShapes = parties[0].size() + parties[1].size(); 029 int startX, startY, delta; 030 int objectInLines = 0; 031 032 if (parties[0] == parties[1]) totalShapes /= 2; 033 034 startX = startY = INDENT; 035 delta = 30; 036 037 int i = 0,producerSize = parties[0].size(); 038 039 if (producerSize == 0) throw new NoDataPlotException(); 040 041 while (i<totalShapes) { 042 for (int j=0; j<parties[i/producerSize].size(); j++) { 043 Shape object = (Shape)parties[i/producerSize].get(new Integer(j)); 044 object.move(startX+j*delta-shapeSize/2,startY-shapeSize/2); 045 } 046 if (objectInLines < parties[i/producerSize].size()) 047 objectInLines = parties[i/producerSize].size(); 048 i += parties[i/producerSize].size(); 049 startY = INDENT + 350; 050 } 051 Rectangle bounds = new Rectangle(); 052 bounds.height = 2*(INDENT + shapeSize)+350; 053 bounds.width = shapeSize + delta * (objectInLines - 1) + INDENT*2; 054 055 image.setImageWidth(bounds.width, bounds.height); 056 return bounds; 057 } 058 }